package thread;

//通过继承 Thread ，重写 run
class MyThread extends Thread {
    //此处Thread可以直接使用，不需要导入包
    //java.lang包是默认导入了的，里面所有的类都可以直接使用
    @Override
    //继承不是主要目的，主要目的是重写run()方法
    public void run() {
        while(true) {
            //这里写的代码，就是即将创建出的线程要执行的逻辑
            System.out.println("hello thread");
            //在循环中加入一个 休眠 操作，让循环每循环一次就休息一下，避免CPU消耗过大
            try {
                Thread.sleep(1000);
                //sleep()是Thread的静态方法，所以可以直接通过 类名.方法名 进行调用。
                //静态方法就是类方法，不需要实例化对象，通过对象来调用方法，可以直接通过类名进行调用
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
                //idea自动生成的try/catch，catch中默认的代码，有两种风格
                //1.如上，再次抛出一个异常
                //2.格式为：e.printStackTrace();  打印异常信息
                //开发中如何处理异常还有很多种方法，不一定是这俩
            }
        }
    }
}

public class Demo1 {
    public static void main(String[] args) {
        //调用main方法有一个专门的线程来执行，称为“主线程”
        //所以一个进程最少有一个进程（主线程）
        MyThread t1 = new MyThread();

        //创建线程
        t1.start();
        //这是创建的一个新的线程，与主线程之间是并发/并行关系在CPU上执行
        //t1.run();

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
